﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IMDTO;
using IMDAL;

namespace IMBL
{
    public class IMBLPersPlan
    {
        public static IMDTOPersoonPlan GetPersoonPlanById(int id, int count)
        {
            PersoonPlan pp = IMDALPersPlan.GetPersoonPlanById(id, count);
            IMDTOPersoonPlan ppDTO = new IMDTOPersoonPlan(pp);
            
            //Add FunctieRollen
            List<IMDTOFunctieRol> frDTOs = new List<IMDTOFunctieRol>();
            var functieRollen = from f in pp.PFK.ElementAt(0).PFKFunctieRol
                                select f.FunctieRol;
            foreach (FunctieRol fr in functieRollen)
            {
                IMDTOFunctieRol frDTO = new IMDTOFunctieRol();
                frDTO.idFunctieRol = fr.IdFunctieRol;
                frDTO.Name = fr.Naam;
                frDTO.Kader = IMDALRefCodeDetail.GetValueByRefCode(101, fr.Kader);
                frDTO.FunctieFamilie = IMDALRefCodeDetail.GetValueByRefCode(102, fr.FunctieFamilie);
                frDTO.FunctieGroep = IMDALRefCodeDetail.GetValueByRefCode(103, fr.FunctieGroep);
                frDTO.FunctieNiveau = IMDALRefCodeDetail.GetValueByRefCode(104, fr.FunctieNiveau);
                
                //Add GedragsCompetenties to FunctieRol
                List<IMDTOGedragsCompetentie> gcDTOs = new List<IMDTOGedragsCompetentie>();
                foreach (FunctieRolGedragsComp frgc in fr.FunctieRolGedragsComp)
                {
                    IMDTOGedragsCompetentie gcDTO = new IMDTOGedragsCompetentie();
                    gcDTO.Name = IMDALRefCodeDetail.GetValueByRefCode(105, frgc.Competentie.Competentie1);
                    gcDTO.Level = (float)frgc.Competentie.Niveau;
                    gcDTOs.Add(gcDTO);
                }
                frDTO.GedragsCompetenties = gcDTOs;

                //Add TechnischeCompetenties to FunctieRol
                List<IMDTOTechnischeCompetentie> tcDTOs = new List<IMDTOTechnischeCompetentie>();
                foreach (FunctieRolTechComp frtc in fr.FunctieRolTechComp)
                {
                    IMDTOTechnischeCompetentie tcDTO = new IMDTOTechnischeCompetentie();
                    tcDTO.Name = IMDALRefCodeDetail.GetValueByRefCode(106, frtc.Competentie.Competentie1);
                    tcDTO.Level = (float)frtc.Competentie.Niveau;
                    tcDTOs.Add(tcDTO);
                }
                frDTO.TechnischeCompetenties = tcDTOs;

                //Add Kernresultaten to FunctieRol
                List<IMDTOKernResultaat> krDTOs = new List<IMDTOKernResultaat>();
                foreach (FunctieRolKernresultaat frk in fr.FunctieRolKernresultaat)
                {
                    IMDTOKernResultaat krDTO = new IMDTOKernResultaat();
                    krDTO.IdKernresultaat = frk.KernResultaat.IdKernresultaat;
                    krDTO.Kernresultaat1 = IMDALRefCodeDetail.GetValueByRefCode(108, frk.KernResultaat.Kernresultaat1);
                    krDTO.KernresultaatGebied = IMDALRefCodeDetail.GetValueByRefCode(107, frk.KernResultaat.KernresultaatGebied);
                    krDTO.KernTaak = IMDALRefCodeDetail.GetValueByRefCode(109, frk.KernResultaat.KernTaak);
                    krDTOs.Add(krDTO);
                }
                frDTO.Kernresultaten = krDTOs;

                frDTOs.Add(frDTO);
            }
            ppDTO.FunctieRollen = frDTOs;


            //Add AanvullendeFunctieRollen
            List<IMDTOAanvullendeFunctieRol> afrDTOs = new List<IMDTOAanvullendeFunctieRol>();
            var aanvullendeFunctieRollen = from f in pp.PFK.ElementAt(0).PFKAanvullendeFunctieRol
                                           select f.AanvullendeFunctieRol;
            foreach (AanvullendeFunctieRol afr in aanvullendeFunctieRollen)
            {
                IMDTOAanvullendeFunctieRol afrDTO = new IMDTOAanvullendeFunctieRol();
                afrDTO.idAanvullendeFunctieRol = afr.IdAanvullendeFunctieRol;
                afrDTO.Description = afr.Description;
                afrDTO.FunctieFamilie = IMDALRefCodeDetail.GetValueByRefCode(112, afr.FunctieFamilie);
                afrDTO.FunctieNiveau = IMDALRefCodeDetail.GetValueByRefCode(104, afr.FunctieNiveau);
                afrDTOs.Add(afrDTO);
            }
            ppDTO.AanvullendeFunctieRollen = afrDTOs;

            return ppDTO;
        }

        public static IMDTONaturalPerson GetNaturalPersonById(int id)
        {
            return new IMDTONaturalPerson(IMDALPersPlan.GetNaturalPersonById(id));
        }
    }

    
}
